/**
数据验证（表单验证）
*/
module.exports = {
	error: '',
	check: function(data, rule) {

		var nameTemp = rule[0].name

		// console.log(data[rule[0].name])
		// console.log(JSON.parse(data))
		// console.log(rule[0].name)

		for (var i = 0; i < rule.length; i++) {
			if (!rule[i].checkType) {
				return true;
			}
			if (!rule[i].name) {
				return true;
			}
			if (!rule[i].errorMsg) {
				return true;
			}
			if (!data[rule[i].name] && data[rule[i].name] !== 0) {
				this.error = rule[i].errorMsg;
				return false;
			}

			// console.log(rule[i].checkType)
			switch (rule[i].checkType) {
				/* 功能描述 : 字符串长度验证
				参数格式 : checkData="x," 或 checkData="x,x" */
				case 'string':
					var reg = new RegExp('^.{' + rule[i].checkRule + '}$');
					if (!reg.test(data[rule[i].name])) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					/* 功能描述 : 整数及整数位数验证
					参数格式 : checkData="x," 或 checkData="x,x" */
				case 'int':
					var reg = new RegExp('^(-[1-9]|[1-9])[0-9]{' + rule[i].checkRule + '}$');
					if (!reg.test(data[rule[i].name])) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					break;
					/* 功能描述 : 2数之间验证(不限制数值类型)
					参数格式 : checkData="x," checkData=",x" 或 checkData="x,x" */
				case 'between':
					if (!this.isNumber(data[rule[i].name])) {
						this.error = rule[i].errorMsg;
						return false;
					}
					var minMax = rule[i].checkRule.split(',');
					minMax[0] = Number(minMax[0]);
					minMax[1] = Number(minMax[1]);
					if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					/* 功能描述 : 2数之间验证(数值类型为整数)
					参数格式 : checkData="x," checkData=",x" 或 checkData="x,x" */
				case 'betweenD':
					var reg = /^-?[1-9][0-9]?$/;
					if (!reg.test(data[rule[i].name])) {
						this.error = rule[i].errorMsg;
						return false;
					}
					var minMax = rule[i].checkRule.split(',');
					minMax[0] = Number(minMax[0]);
					minMax[1] = Number(minMax[1]);
					if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					/* 功能描述 : 2数之间验证(数值类型为小数)
					参数格式 : checkData="x," checkData=",x" 或 checkData="x,x" */
				case 'betweenF':
					var reg = /^-?[0-9][0-9]?.+[0-9]+$/;
					// if (!reg.test(data[rule[i].name])){
					// 	console.log('提前结束')
					// 	this.error = rule[i].errorMsg;
					// 	 return false;}
					var minMax = rule[i].checkRule.split(',');
					minMax[0] = Number(minMax[0]);
					minMax[1] = Number(minMax[1]);
					console.log(minMax[0])
					console.log(minMax[1])
					console.log(data[rule[i].name])
					console.log('结束')
					if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					/* 功能描述 : 是否为某个固定值
					参数格式 : checkData="xx" */
				case 'same':
					if (data[rule[i].name] != rule[i].checkRule) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					/* 功能描述 : 不等某个固定值
					参数格式 : checkData="xx" */
				case 'notsame':
					if (data[rule[i].name] == rule[i].checkRule) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					/* 功能描述 : 电子邮箱验证
					参数格式 : 无需参数 */
				case 'email':
					var reg = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
					if (!reg.test(data[rule[i].name])) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					/* 功能描述 : 手机号码验证
					参数格式 : 无需参数 */
				case 'phoneno':
					var reg = /^1[0-9]{10,10}$/;
					if (!reg.test(data[rule[i].name])) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					/* 功能描述 : 社会信用统一编码
					参数格式 : 无需参数 */
				case 'qyba':
					var reg = /^[A-Z0-9]{0,32}$/;
					if (!reg.test(data[rule[i].name])) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					/* 功能描述 : 国内邮编验证
					参数格式 : 无需参数 */
				case 'zipcode':
					var reg = /^[0-9]{6}$/;
					if (!reg.test(data[rule[i].name])) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					/* 功能描述 : 正则表达式验证
					参数格式 : checkData="正则表达式内容" */
				case 'reg':
					var reg = new RegExp(rule[i].checkRule);
					if (!reg.test(data[rule[i].name])) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					// 是否为类型
				case 'in':
					if (rule[i].checkRule.indexOf(data[rule[i].name]) == -1) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					// 是否为null
				case 'notnull':
					if (data[rule[i].name] == null || data[rule[i].name].length < 1) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					// 身份证严格校验
				case 'isCardID':
					if (!this.isCardID(data[rule[i].name])) {
						// this.error = rule[i].errorMsg;
						return false;
					}
					break;
					// 姓名判断
				case 'name':
					var reg = /^[\u4E00-\u9FA5A-Za-z\s]+(·[\u4E00-\u9FA5A-Za-z]+)*$/;
					if (!reg.test(data[rule[i].name])) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					// 只能输入数字跟字母
				case 'numberAndString':
					var reg = /^[0-9a-zA-Z]+$/;
					if (!reg.test(data[rule[i].name])) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
					// 只能输入数字
				case 'number':
					var reg = /^\d+$|^\d+[.]?\d+$/;;
					if (!reg.test(data[rule[i].name])) {
						this.error = rule[i].errorMsg;
						return false;
					}
					break;
			}
		}
		return true;
	},
	isNumber: function(checkVal) {
		var reg = /^-?[1-9][0-9]?.?[0-9]*$/;
		return reg.test(checkVal);
	},
	//身份证号合法性验证 
	//支持15位和18位身份证号
	//支持地址编码、出生日期、校验位验证
	isCardID: function(sId) {
		var aCity = {
			11: "北京",
			12: "天津",
			13: "河北",
			14: "山西",
			15: "内蒙古",
			21: "辽宁",
			22: "吉林",
			23: "黑龙江",
			31: "上海",
			32: "江苏",
			33: "浙江",
			34: "安徽",
			35: "福建",
			36: "江西",
			37: "山东",
			41: "河南",
			42: "湖北",
			43: "湖南",
			44: "广东",
			45: "广西",
			46: "海南",
			50: "重庆",
			51: "四川",
			52: "贵州",
			53: "云南",
			54: "西藏",
			61: "陕西",
			62: "甘肃",
			63: "青海",
			64: "宁夏",
			65: "新疆",
			71: "台湾",
			81: "香港",
			82: "澳门",
			91: "国外"
		}
		var iSum = 0;
		if (!/^\d{17}(\d|x)$/i.test(sId)) {
			this.error = "你输入的身份证长度或格式错误";
			return false;
		}
		sId = sId.replace(/x$/i, "a");
		if (aCity[parseInt(sId.substr(0, 2))] == null) {
			this.error = "你的身份证地区非法";
			return false;
		}
		sBirthday = sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2));
		var d = new Date(sBirthday.replace(/-/g, "/"));
		if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate())) {
			this.error = "身份证上的出生日期非法";
			return false;
		}
		for (var i = 17; i >= 0; i--) iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11);
		if (iSum % 11 != 1) {
			this.error = "你输入的身份证号非法";
			return false;
		}
		return true;
	}
}
